package com.xxjh.brs.ftp.common.utils;

import com.xxjh.brs.ftp.common.predicate.FtpPredicate;
import org.apache.commons.net.ftp.FTPFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

/**
 * @author CHENCHEN
 * @title FTP工具类
 * @company 新兴际华科技（天津）有限公司
 * @create 2024-07-03 19:21
 */
public class FtpFileUtil {

    private static final Logger log = LoggerFactory.getLogger(FtpFileUtil.class);


    /**
     * 在给定的FTP目录中查找是否存在tileset.json文件。
     *
     * @param files  获取到的FTP下文件。
     * @param directory  要检查的FTP目录路径。
     * @param ftpPredicate  断言，匹配满足自定义查找的目录和文件。
     * @return 如果找到tileset.json文件，则返回其完整路径；否则返回null。
     */
    public static Optional<String> findFileInFtpDirectory(FTPFile[] files, String directory, FtpPredicate ftpPredicate) {
        for (FTPFile file : files) {
            if (ftpPredicate.directorySearch(file, directory)) {
                return Optional.of(directory + "/" + file.getName());
            }
        }
        return Optional.empty();
    }

    /**
     * 查找FTP中最后一个修改的文件目录。
     *
     * @param directories FTP目录下文件夹。
     * @return 找到最后一个修改过的文件夹。
     */
    public static FTPFile findNewestDirectory(FTPFile[] directories) {
        FTPFile newest = null;
        for (FTPFile dir : directories) {
            if (Thread.currentThread().isInterrupted()) {
                return null; // 中断标记已设，提前结束循环
            }
            if (newest == null || dir.getTimestamp().after(newest.getTimestamp())) {
                newest = dir;
            }
        }
        return newest;
    }

}
